/* 
Scenic Graphics Library
Copyright (C) 2007 Jouni Tulkki

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USApackage scenic;
*/

package scenic.toolkit.db;

import java.util.IdentityHashMap;
import java.util.LinkedList;
import java.util.Map;

import scenic.toolkit.db.event.ChangeEvent;
import scenic.toolkit.db.event.RecordChangeEvent;

public abstract class Record extends Node {
	private LinkedList<NodeListener> listeners = new LinkedList<NodeListener>();
	private Map<Property, Object> properties = new IdentityHashMap<Property, Object>();
	
	protected void notifyChange(String member) {
		notifyChange(new RecordChangeEvent(this, member));
	}
	
	public void storeTo(StorageOutputStream stream) {
		stream.write(this);
	}

	public void storeMembersTo(StorageOutputStream stream) {	
	}
		
	public void addListener(NodeListener listener) {
		listeners.add(listener);
	}

	public void removeListener(NodeListener listener) {
		listeners.remove(listener);
	}
	
	public void notifyChange(ChangeEvent event) {
		for(NodeListener l : listeners)
			l.changed(event);
		super.notifyChange(event);
	}
	
	Object read(Property property) {
		return properties.get(property);
	}
	
	void write(Property property, Object value) {
		properties.put(property, value);
	}
}
